L'exportation en chaîne de caractères doit se faire en tenant compte du style. En effet, la structure de donnée IndexStyle
contient les éléments intermédiaires à placer entre les différents éléments.
Une fonction principale showIndexSections
permet de générer l'index. Le préambule et le postambule sont ajoutés par concaténation à parti des chaînes idxPreamble
et idxPostamble
.
Pour afficher une section sous forme de chaîne de caractères, on intercale (avec la fonction intercalate
) la chaîne qui fait la jonction entre deux sections.
On s'assure de ne prendre que des sections contenant des sous-sections en filtrant avec filter
les sous-sections qui ne sont pas vides (not (null sub)
).
On appelle avec map
et showIndexSection
chaque section pour les convertir en chaînes de caractères.
Une section est affichée de la façon suivante :
Le titre.
Le suffixe en utilisant idxHeadingSufL0
.
Les éventuelles sous sections.
Les présences des sections et du titre sont détectés grâce aux empreintes appropriées dans la définition de la fonction ([]
et ""
) :
L'exportation des sous-sections se fait de la même façon que les sections. Les différences sont que :
On utilise les chaînes de caractère associées aux sous-sections.
On appelle la fonction permettant de convertir les items en chaînes de caractères.
Les entrées d'index sont exportées en affichant :
La chaîne de caractère à insérer avant un item.
Le nom de l'item.
Le délimiteur entre le nom et les numéros de page idxDelim0
.
Les numéros de pages (en ajoutant la commande LaTeX \hyperpage
devant chaque numéro).
Les éventuels sous-items.
Pour convertir les en-têtes, là encore on se base sur le style.
Pour savoir dans quel type de section on se trouve, on utilise le pattern matching:
Si la section en cours concerne des mots (Commençant par des lettres).
Selon la valeur du style idxHeadingFlag0
on aura:
Si idxHeadingFlag0 == UpperCase
(Majuscules) alors on prend la première lettre take 1
et on la convertit en majuscule avec toUpper
Si idxHeadingFlag0 == LowerCase
(Minuscules) alors on prend la première lettre take 1
et on la convertit en majuscule avec toLower
Si la section en cours concerne des nombres (Commençant par des chiffres). On utilise le champ idxNumhead
qui contient l'en-tête dédié à la section des nombres.
Si la section en cours concerne des symboles (Commençant par des symboles). On utilise le champ idxNumhead
qui contient l'en-tête dédié à la section des nombres.
Les en-têtes de niveau 2 sont des en-têtes permettant de subdiviser le classement de l'index.
Comme les en-têtes de niveau 1, on affiche le titre en fonction du style.
Si la section en cours concerne des mots (Commençant par des lettres).
Selon la valeur du style idxHeadingFlag1
on aura:
Si idxHeadingFlag1 == UpperCase
(Majuscules) alors on prend les deux premières lettres take 2
et on les convertit en majuscule avec toUpper
Si idxHeadingFlag1 == LowerCase
(Minuscules) alors on prend les deux premières lettres take 2
et on les convertit en majuscule avec toLower
Si la section en cours concerne des nombres (Commençant par des chiffres) alors on prend le premier caractère take 1
.
Si la section en cours concerne des symboles (Commençant par des symboles), la aussi on prend le premier caractère take 1
.
On peut aussi simplifier les empreintes Numbers
et Symbols
en modifiant les gardes :